﻿using System;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Security.Services;
using System.Collections.Generic;
using Sinacor.UI.Bovespa.Corretagem.Communication.Bovespa.Corretagem.PoliticaCorretagem;

namespace Sinacor.UI.Bovespa.Corretagem.Communication.Translator.ModelToDataContract
{
    /// <summary>
    /// Tradutor para politica de corretagem
    /// </summary>
    [Serializable]
    public class PoliticaCorretagem
    {
        #region Construtor

        /// <summary>
        /// Construtor PoliticaCorretagem
        /// </summary>
        public PoliticaCorretagem() { }

        #endregion

        #region Métodos Públicos

        /// <summary>
        /// 
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public Bovespa.Corretagem.PoliticaCorretagem.FiltroPoliticaCorretagemRequest ToFiltroPoliticaCorretagemRequest(Model.Parameter.FiltroPoliticaCorretagem model)
        {
            Bovespa.Corretagem.PoliticaCorretagem.FiltroPoliticaCorretagemRequest dataContract = null;

            if (model != null)
            {
                dataContract = new Bovespa.Corretagem.PoliticaCorretagem.FiltroPoliticaCorretagemRequest
                {
                    Codigo = model.Codigo,
                    DataFinal = model.DataFinal,
                    DataInicial = model.DataInicial,
                    Descricao = model.Descricao,
                    EfetuarVerificacao = model.EfetuarVerificacao,
                    TabelaBeneficio = this.ToTabelaCorretagemRequest(model.TabelaBeneficio),
                    TabelaPadrao = this.ToTabelaCorretagemRequest(model.TabelaPadrao),
                    TipoAplicacao = this.ToTipoAplicacaoPoliticaRequest(model.TipoAplicacao),
                    TipoControleBeneficio = ToTipoControleBeneficio(model.TipoControleBeneficio)
                };
            }

            return dataContract;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public Bovespa.Corretagem.PoliticaCorretagem.FiltroPoliticaCorretagemChaveRequest ToFiltroPoliticaCorretagemChaveRequest(Model.Parameter.FiltroPoliticaCorretagemChave model)
        {
            Bovespa.Corretagem.PoliticaCorretagem.FiltroPoliticaCorretagemChaveRequest dataContract = null;

            if (model != null)
            {
                dataContract = new Bovespa.Corretagem.PoliticaCorretagem.FiltroPoliticaCorretagemChaveRequest
                {
                    Codigo = model.Codigo,
                    DataInicial = model.DataInicial
                };
            }

            return dataContract;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public Bovespa.Corretagem.PoliticaCorretagem.PoliticaCorretagemRequest ToPoliticaCorretagemRequest(Model.PoliticaCorretagem model)
        {
            Bovespa.Corretagem.PoliticaCorretagem.PoliticaCorretagemRequest dataContract = null;

            if (model != null)
            {
                dataContract = new Bovespa.Corretagem.PoliticaCorretagem.PoliticaCorretagemRequest
                {
                    Beneficios = ToControleBeneficio(model.Beneficios),
                    Codigo = model.Codigo,
                    DataFinal = model.DataFinal,
                    DataInicial = model.DataInicial,
                    Descricao = model.Descricao,
                    EfetuarVerificacao = model.EfetuarVerificacao,
                    TabelaBeneficio = this.ToTabelaCorretagem(model.TabelaBeneficio),
                    TabelaPadrao = this.ToTabelaCorretagem(model.TabelaPadrao),
                    TipoAplicacao = ToTipoAplicacaoPolitica(model.TipoAplicacao),
                    TipoControleBeneficio = ToTipoControleBeneficio(model.TipoControleBeneficio),
                    Verificacoes = ToVerificacaoPolitica(model.Verificacoes)
                };
            }

            return dataContract;
        }

        #endregion

        #region Métodos Privados

        private List<Bovespa.Corretagem.PoliticaCorretagem.VerificacaoPolitica> ToVerificacaoPolitica(ModelCollection<Model.VerificacaoPolitica> modelCollection)
        {
            List<Bovespa.Corretagem.PoliticaCorretagem.VerificacaoPolitica> listaContracts = null;

            if (modelCollection != null)
            {
                listaContracts = new List<Bovespa.Corretagem.PoliticaCorretagem.VerificacaoPolitica>();

                foreach (Model.VerificacaoPolitica item in modelCollection)
                {
                    listaContracts.Add(this.ToVerificacaoPolitica(item));
                }
            }

            return listaContracts;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.VerificacaoPolitica ToVerificacaoPolitica(Model.VerificacaoPolitica model)
        {
            Bovespa.Corretagem.PoliticaCorretagem.VerificacaoPolitica dataContract = null;

            if (model != null)
            {
                dataContract = new Bovespa.Corretagem.PoliticaCorretagem.VerificacaoPolitica
                {
                    Acao = ToAcaoVerificacaoPolitica(model.Acao),
                    Ativo = model.Ativo,
                    Carteira = model.Carteira,
                    CodigoAgente = model.CodigoAgente,
                    CodigoAssessor = model.CodigoAssessor,
                    CodigoOperador = model.CodigoOperador,
                    CodigoPolitica = model.CodigoPolitica,
                    CodigoTabelaBeneficio = model.CodigoTabelaBeneficio,
                    CodigoTabelaPadrao = model.CodigoTabelaPadrao,
                    DataInicial = model.DataInicial,
                    Mercado = this.ToMercado(model.Mercado),
                    NaturezaOperacao = ToNaturezaOperacao(model.NaturezaOperacao),
                    TipoOperacao = ToTipoOperacaoVerificacao(model.TipoOperacao)
                };
            }

            return dataContract;
        }

        private TipoMercado? ToMercado(EnumWrapper<Model.Enum.TipoMercado> tipoMercado)
        {
            TipoMercado? retorno = null;

            if (tipoMercado != null)
            {
                retorno = new TipoMercado();

                switch (tipoMercado.Value)
                {
                    case Model.Enum.TipoMercado.Vista:
                        retorno = TipoMercado.Vista;
                        break;
                    case Model.Enum.TipoMercado.OpcaoCompra:
                        retorno = TipoMercado.OpcaoCompra;
                        break;
                    case Model.Enum.TipoMercado.OpcaoVenda:
                        retorno = TipoMercado.OpcaoVenda;
                        break;
                    case Model.Enum.TipoMercado.ExercicioOpcaoCompra:
                        retorno = TipoMercado.ExercicioOpcaoCompra;
                        break;
                    case Model.Enum.TipoMercado.ExercicioOpcaoVenda:
                        retorno = TipoMercado.ExercicioOpcaoVenda;
                        break;
                    case Model.Enum.TipoMercado.Fracionario:
                        retorno = TipoMercado.Fracionario;
                        break;
                    case Model.Enum.TipoMercado.Estruturado:
                        retorno = TipoMercado.Estruturado;
                        break;
                    case Model.Enum.TipoMercado.Leilao:
                        retorno = TipoMercado.Leilao;
                        break;
                    case Model.Enum.TipoMercado.Termo:
                        retorno = TipoMercado.Termo;
                        break;
                    case Model.Enum.TipoMercado.LeilaoNaoCotados:
                        retorno = TipoMercado.LeilaoNaoCotados;
                        break;
                    case Model.Enum.TipoMercado.Futuro:
                        retorno = TipoMercado.Futuro;
                        break;
                    case Model.Enum.TipoMercado.VencimentoFuturo:
                        retorno = TipoMercado.VencimentoFuturo;
                        break;
                    case Model.Enum.TipoMercado.BOX:
                        retorno = TipoMercado.BOX;
                        break;
                    //case Model.Enum.TipoMercado.OpcaoVendaCompra:
                    //    retorno = TipoMercado.OpcaoVendaCompra;
                    //    break;
                    //case Model.Enum.TipoMercado.IntegralizacaoResgateCotas:
                    //    retorno = TipoMercado.IntegralizacaoResgateCotas;
                    //    break;
                    //case Model.Enum.TipoMercado.CotasETF:
                    //    retorno = TipoMercado.CotasETF;
                    //    break;
                }
            }

            return retorno;
        }  

        private Bovespa.Corretagem.PoliticaCorretagem.TipoOperacaoVerificacao ToTipoOperacaoVerificacao(Model.TipoOperacaoVerificacao model)
        {
            Bovespa.Corretagem.PoliticaCorretagem.TipoOperacaoVerificacao dataContract = null;

            if (model != null)
            {
                dataContract = new Bovespa.Corretagem.PoliticaCorretagem.TipoOperacaoVerificacao
                {
                    Codigo = model.Codigo,
                    Nome = model.Nome
                };
            }

            return dataContract;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.NaturezaOperacao? ToNaturezaOperacao(EnumWrapper<Model.Enum.NaturezaOperacao> from)
        {
            Bovespa.Corretagem.PoliticaCorretagem.NaturezaOperacao? to = null;

            if (from != null)
            {
                switch (from.Value)
                {
                    case Model.Enum.NaturezaOperacao.Compra:
                        to = Bovespa.Corretagem.PoliticaCorretagem.NaturezaOperacao.Compra;
                        break;
                    case Model.Enum.NaturezaOperacao.Venda:
                        to = Bovespa.Corretagem.PoliticaCorretagem.NaturezaOperacao.Venda;
                        break;
                }
            }

            return to;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.AcaoVerificacaoPolitica ToAcaoVerificacaoPolitica(Model.Enum.AcaoVerificacaoPolitica from)
        {
            Bovespa.Corretagem.PoliticaCorretagem.AcaoVerificacaoPolitica to = new Bovespa.Corretagem.PoliticaCorretagem.AcaoVerificacaoPolitica();

            switch (from)
            {
                case Model.Enum.AcaoVerificacaoPolitica.Excluir:
                    to = Bovespa.Corretagem.PoliticaCorretagem.AcaoVerificacaoPolitica.Excluir;
                    break;
                case Model.Enum.AcaoVerificacaoPolitica.Incluir:
                    to = Bovespa.Corretagem.PoliticaCorretagem.AcaoVerificacaoPolitica.Incluir;
                    break;
                case Model.Enum.AcaoVerificacaoPolitica.Nenhuma:
                    to = Bovespa.Corretagem.PoliticaCorretagem.AcaoVerificacaoPolitica.Nenhuma;
                    break;
            }

            return to;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.ControleBeneficio ToControleBeneficio(Model.ControleBeneficio model)
        {
            Bovespa.Corretagem.PoliticaCorretagem.ControleBeneficio dataContract = null;

            if (model != null)
            {
                dataContract = new Bovespa.Corretagem.PoliticaCorretagem.ControleBeneficio
                {
                    CodigoPolitica = model.CodigoPolitica,
                    DataInicial = model.DataInicial,
                    TipoBeneficio = ToTipoBeneficio(model.TipoBeneficio),
                    ValorQuantidade = model.ValorQuantidade
                };
            }

            return dataContract;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.TipoBeneficio ToTipoBeneficio(Model.TipoBeneficio model)
        {
            Bovespa.Corretagem.PoliticaCorretagem.TipoBeneficio dataContract = null;

            if (model != null)
            {
                dataContract = new Bovespa.Corretagem.PoliticaCorretagem.TipoBeneficio
                {
                    BaseVerificacao = ToTipoBaseVerificacao(model.BaseVerificacao),
                    Codigo = model.Codigo,
                    Descricao = model.Descricao,
                    Tratamento = ToTipoTratamentoBeneficio(model.Tratamento)
                };
            }

            return dataContract;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.TipoTratamentoBeneficio? ToTipoTratamentoBeneficio(Model.Enum.TipoTratamentoBeneficio? model)
        {
            Bovespa.Corretagem.PoliticaCorretagem.TipoTratamentoBeneficio? to = null;

            switch (model)
            {
                case Model.Enum.TipoTratamentoBeneficio.Diario:
                    to = Bovespa.Corretagem.PoliticaCorretagem.TipoTratamentoBeneficio.Diario;
                    break;
                case Model.Enum.TipoTratamentoBeneficio.Mensal:
                    to = Bovespa.Corretagem.PoliticaCorretagem.TipoTratamentoBeneficio.Mensal;
                    break;
                case Model.Enum.TipoTratamentoBeneficio.Periodico:
                    to = Bovespa.Corretagem.PoliticaCorretagem.TipoTratamentoBeneficio.Periodico;
                    break;
            }

            return to;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.TipoBaseVerificacao? ToTipoBaseVerificacao(Model.Enum.TipoBaseVerificacao? model)
        {
            Bovespa.Corretagem.PoliticaCorretagem.TipoBaseVerificacao? to = null;

            switch (model)
            {
                case Model.Enum.TipoBaseVerificacao.Quantidade:
                    to = Bovespa.Corretagem.PoliticaCorretagem.TipoBaseVerificacao.Quantidade;
                    break;
                case Model.Enum.TipoBaseVerificacao.Valor:
                    to = Bovespa.Corretagem.PoliticaCorretagem.TipoBaseVerificacao.Valor;
                    break;
            }

            return to;
        }

        private List<Bovespa.Corretagem.PoliticaCorretagem.ControleBeneficio> ToControleBeneficio(ModelCollection<Model.ControleBeneficio> modelList)
        {
            List<Bovespa.Corretagem.PoliticaCorretagem.ControleBeneficio> listaContracts = null;

            if (modelList != null)
            {
                listaContracts = new List<Bovespa.Corretagem.PoliticaCorretagem.ControleBeneficio>();

                foreach (Model.ControleBeneficio item in modelList)
                {
                    listaContracts.Add(this.ToControleBeneficio(item));
                }
            }

            return listaContracts;
        }

        private List<Bovespa.Corretagem.PoliticaCorretagem.FaixaAplicacao> ToFaixaAplicacao(ModelCollection<Model.FaixaAplicacao> modelList)
        {
            List<Bovespa.Corretagem.PoliticaCorretagem.FaixaAplicacao> listDataContracts = null;

            if (modelList != null)
            {
                listDataContracts = new List<Bovespa.Corretagem.PoliticaCorretagem.FaixaAplicacao>();

                foreach (Model.FaixaAplicacao item in modelList)
                {
                    listDataContracts.Add(this.ToFaixaAplicacao(item));
                }
            }

            return listDataContracts;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.FaixaAplicacao ToFaixaAplicacao(Model.FaixaAplicacao model)
        {
            Bovespa.Corretagem.PoliticaCorretagem.FaixaAplicacao dataContract = null;

            if (model != null)
            {
                dataContract = new Bovespa.Corretagem.PoliticaCorretagem.FaixaAplicacao
                {
                    Acao = this.ToAcao(model.Acao),
                    Aliquota = model.Aliquota,
                    CodigoTabela = model.CodigoTabela,
                    DescricaoAplicacao = model.DescricaoAplicacao,
                    NumeroSequencia = model.NumeroSequencia,
                    TipoAplicacao = this.ToTipoAplicacao(model.TipoAplicacao),
                    Valor = model.Valor,
                    ValorQuantidadeFinal = model.ValorQuantidadeFinal,
                    ValorQuantidadeInicial = model.ValorQuantidadeInicial
                };
            }

            return dataContract;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.TipoAplicacaoCorretagem ToTipoAplicacao(Model.TipoAplicacaoCorretagem model)
        {
            Bovespa.Corretagem.PoliticaCorretagem.TipoAplicacaoCorretagem dataContract = null;

            if (model != null)
            {
                dataContract = new Bovespa.Corretagem.PoliticaCorretagem.TipoAplicacaoCorretagem
                {
                    Descricao = model.Descricao,
                    IdentificadorBaseCalculo = model.IdentificadorBaseCalculo,
                    TipoBaseCalculo = this.ToTipoBaseCalculo(model.TipoBaseCalculo)
                };
            }

            return dataContract;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.TipoBaseCalculo ToTipoBaseCalculo(EnumWrapper<Model.Enum.TipoBaseCalculo> from)
        {
            Bovespa.Corretagem.PoliticaCorretagem.TipoBaseCalculo to = new Bovespa.Corretagem.PoliticaCorretagem.TipoBaseCalculo();

            switch (from.Value)
            {
                case Model.Enum.TipoBaseCalculo.Quantidade:
                    to = Bovespa.Corretagem.PoliticaCorretagem.TipoBaseCalculo.Quantidade;
                    break;
                case Model.Enum.TipoBaseCalculo.Valores:
                    to = Bovespa.Corretagem.PoliticaCorretagem.TipoBaseCalculo.Valores;
                    break;
            }

            return to;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.AcaoFaixaAplicacao ToAcao(Model.Enum.AcaoFaixaAplicacao from)
        {
            Bovespa.Corretagem.PoliticaCorretagem.AcaoFaixaAplicacao to = new Bovespa.Corretagem.PoliticaCorretagem.AcaoFaixaAplicacao();

            switch (from)
            {
                case Model.Enum.AcaoFaixaAplicacao.Nenhuma:
                    to = Bovespa.Corretagem.PoliticaCorretagem.AcaoFaixaAplicacao.Nenhuma;
                    break;
                case Model.Enum.AcaoFaixaAplicacao.Incluir:
                    to = Bovespa.Corretagem.PoliticaCorretagem.AcaoFaixaAplicacao.Incluir;
                    break;
                case Model.Enum.AcaoFaixaAplicacao.Excluir:
                    to = Bovespa.Corretagem.PoliticaCorretagem.AcaoFaixaAplicacao.Excluir;
                    break;
            }

            return to;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.ModoAplicacao? ToModoAplicacao(EnumWrapper<Model.Enum.ModoAplicacao> from)
        {
            Bovespa.Corretagem.PoliticaCorretagem.ModoAplicacao? to = null;

            if (from != null)
            {
                switch (from.Value)
                {
                    case Model.Enum.ModoAplicacao.SomaValoresOperador:
                        to = Bovespa.Corretagem.PoliticaCorretagem.ModoAplicacao.SomaValores;
                        break;
                    case Model.Enum.ModoAplicacao.AssumeMaiorValor:
                        to = Bovespa.Corretagem.PoliticaCorretagem.ModoAplicacao.AssumeMaior;
                        break;
                    case Model.Enum.ModoAplicacao.AssumeMenorValor:
                        to = Bovespa.Corretagem.PoliticaCorretagem.ModoAplicacao.AssumeMenor;
                        break;
                }
            }

            return to;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.TipoControleBeneficio? ToTipoControleBeneficio(Model.Enum.TipoControleBeneficio? model)
        {
            Bovespa.Corretagem.PoliticaCorretagem.TipoControleBeneficio? to = null;

            if (model.HasValue)
            {
                switch (model)
                {
                    case Model.Enum.TipoControleBeneficio.Nao:
                        to = Bovespa.Corretagem.PoliticaCorretagem.TipoControleBeneficio.Nao;
                        break;
                    case Model.Enum.TipoControleBeneficio.SimE:
                        to = Bovespa.Corretagem.PoliticaCorretagem.TipoControleBeneficio.SimE;
                        break;
                    case Model.Enum.TipoControleBeneficio.SimOU:
                        to = Bovespa.Corretagem.PoliticaCorretagem.TipoControleBeneficio.SimOU;
                        break;
                }
            }


            return to;
        }

        private List<Bovespa.Corretagem.PoliticaCorretagem.DescontoDiferenciado> ToDescontoDiferenciado(ModelCollection<Model.DescontoDiferenciado> modelList)
        {
            List<Bovespa.Corretagem.PoliticaCorretagem.DescontoDiferenciado> listataContracts = null;

            if (modelList != null)
            {
                listataContracts = new List<Bovespa.Corretagem.PoliticaCorretagem.DescontoDiferenciado>();

                foreach (Model.DescontoDiferenciado item in modelList)
                {
                    listataContracts.Add(this.ToDescontoDiferenciado(item));
                }
            }

            return listataContracts;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.DescontoDiferenciado ToDescontoDiferenciado(Model.DescontoDiferenciado model)
        {
            Bovespa.Corretagem.PoliticaCorretagem.DescontoDiferenciado dataContract = null;

            if (model != null)
            {
                dataContract = new Bovespa.Corretagem.PoliticaCorretagem.DescontoDiferenciado
                {
                    CodigoTabela = model.CodigoTabela,
                    Percentual = model.Percentual,
                    TipoDesconto = this.ToTipoDescontoDiferenciado(model.TipoDesconto)
                };
            }

            return dataContract;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.TipoDescontoDiferenciado ToTipoDescontoDiferenciado(Model.TipoDescontoDiferenciado model)
        {
            Bovespa.Corretagem.PoliticaCorretagem.TipoDescontoDiferenciado dataContract = null;

            if (model != null)
            {
                dataContract = new Bovespa.Corretagem.PoliticaCorretagem.TipoDescontoDiferenciado
                {
                    Codigo = model.Codigo,
                    Descricao = model.Descricao,
                    Obrigatorio = model.Obrigatorio
                };
            }

            return dataContract;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.TipoAplicacaoPolitica ToTipoAplicacaoPolitica(Model.TipoAplicacaoPolitica tipoAplicacaoPolitica)
        {
            Bovespa.Corretagem.PoliticaCorretagem.TipoAplicacaoPolitica dataContract = null;

            if (tipoAplicacaoPolitica != null)
            {
                dataContract = new Bovespa.Corretagem.PoliticaCorretagem.TipoAplicacaoPolitica
                {
                    Codigo = tipoAplicacaoPolitica.Codigo,
                    Descricao = tipoAplicacaoPolitica.Descricao
                };
            }

            return dataContract;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.TipoAplicacaoPoliticaRequest ToTipoAplicacaoPoliticaRequest(Model.TipoAplicacaoPolitica tipoAplicacaoPolitica)
        {
            Bovespa.Corretagem.PoliticaCorretagem.TipoAplicacaoPoliticaRequest dataContract = null;

            if (tipoAplicacaoPolitica != null)
            {
                dataContract = new Bovespa.Corretagem.PoliticaCorretagem.TipoAplicacaoPoliticaRequest
                {
                    Codigo = tipoAplicacaoPolitica.Codigo,
                    Descricao = tipoAplicacaoPolitica.Descricao
                };
            }

            return dataContract;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.TabelaCorretagemRequest ToTabelaCorretagemRequest(Model.TabelaCorretagem tabelaCorretagem)
        {
            Bovespa.Corretagem.PoliticaCorretagem.TabelaCorretagemRequest dataContract = null;

            if (tabelaCorretagem != null)
            {
                dataContract = new Bovespa.Corretagem.PoliticaCorretagem.TabelaCorretagemRequest
                {
                    Codigo = tabelaCorretagem.Codigo,
                    Descontos = ToDescontoDiferenciado(tabelaCorretagem.Descontos),
                    Descricao = tabelaCorretagem.Descricao,
                    Faixas = this.ToFaixaAplicacao(tabelaCorretagem.Faixas),
                    IndicadorDescontoDiferenciado = tabelaCorretagem.IndicadorDescontoDiferenciado,
                    ModoAplicacao = this.ToModoAplicacao(tabelaCorretagem.ModoAplicacao),
                    ValorMaximo = tabelaCorretagem.ValorMaximo,
                    ValorMinimo = tabelaCorretagem.ValorMinimo
                };
            }

            return dataContract;
        }

        private Bovespa.Corretagem.PoliticaCorretagem.TabelaCorretagem ToTabelaCorretagem(Model.TabelaCorretagem tabelaCorretagem)
        {
            Bovespa.Corretagem.PoliticaCorretagem.TabelaCorretagem dataContract = null;

            if (tabelaCorretagem != null)
            {
                dataContract = new Bovespa.Corretagem.PoliticaCorretagem.TabelaCorretagem
                {
                    Codigo = tabelaCorretagem.Codigo,
                    Descontos = ToDescontoDiferenciado(tabelaCorretagem.Descontos),
                    Descricao = tabelaCorretagem.Descricao,
                    Faixas = this.ToFaixaAplicacao(tabelaCorretagem.Faixas),
                    IndicadorDescontoDiferenciado = tabelaCorretagem.IndicadorDescontoDiferenciado,
                    ModoAplicacao = this.ToModoAplicacao(tabelaCorretagem.ModoAplicacao),
                    ValorMaximo = tabelaCorretagem.ValorMaximo,
                    ValorMinimo = tabelaCorretagem.ValorMinimo
                };
            }

            return dataContract;
        }

        #endregion
    }
}